/**
 * 公共开窗
 * @author yuan_rz
 * @date 2019/04/12
 */
define(function () {

    var self,
        app = win.app,
        vueData = {
            multiple: false,
            config: {
                method: '', //方法名必传
                columnList: [],//必传
                url: '',//必传
                dataList: [],//多选必传
                key: '',//多选必传
                searchParam:{},//可传可不传
                limitList: []//可传可不传
            },
            loading: false,
            tableData: [],
            count: 0,
            page: 1,
            limit: 10,
            prop: 'keyword',
            keyword: '',
            _SORT: {
                field: null,
                sort: null,
            }
        },
        table_where = {
            
        },
        cb
    ;

    app.newModule({
        init: function () {
            self = this;
            self._super({
                _tag: 'common_open_window'
            }, win);
        },
        queryDatas: function () {
            //页数，和每页条数
            var _xdata = {
                method: vueData.config.method,
                page: vueData.page,
                limit: vueData.limit
            }
            //额外查询参数
            _xdata = $.extend(_xdata,vueData.config.searchParam);
            //搜索关键字
            var str = "";
            if(vueData.keyword != "" && vueData.keyword !=null){
                if(vueData.prop == 'keyword'){
                    var num=0;
                    str = "AND (";
                    for(var j=0;j < vueData.config.columnList.length;j++){
                        if(!vueData.config.columnList[j].unshow || vueData.config.columnList[j].unshow==undefined || vueData.config.columnList[j].unshow==null){
                            /*if(j != vueData.config.columnList.length-1){
                                str = str + vueData.config.columnList[j].prop + " LIKE '%"+ vueData.keyword +"%' OR ";
                            }else {
                                str = str + vueData.config.columnList[j].prop + " LIKE '%"+ vueData.keyword + "%' )";
                            }*/
                            num++;
                            str = str + vueData.config.columnList[j].prop + " LIKE '%"+ vueData.keyword +"%' OR ";
                        }
                    }
                    if(num > 0){
                        str=str.substring(0,str.lastIndexOf("OR"))+')'
                    }else {
                        str=null;
                    }
                }else {
                    str = "AND "+ vueData.prop + " LIKE '%"+ vueData.keyword + "%'";
                }
            }

            _xdata['keyword'] = str;
            // _xdata[vueData.prop] = vueData.keyword;
            //排序关键字
            if(vueData._SORT.field != null){
                _xdata['_SORT'] = JSON.stringify(vueData._SORT);
            }
            //异步查询
            app.ajax({
                xurl: vueData.config.url,
                xdata: _xdata,
                before: function(){
                    try{
                        vueData.loading = true;
                    }catch (error){
                        console.log(error);
                    }
                },
                cb: function (result) {
                    vueData.loading = false;
                    if (result.ok) {
                        //排序
                        for(let item of vueData.config.columnList){
                            if(!item.sortable && item.sortable !=undefined){
                                for(let cell of $(".cell")){
                                    if(cell.innerText==item.label){
                                        $(cell).children('.caret-wrapper').remove();
                                    }
                                }

                            }
                        }
                        var prop = vueData.config.key;
                        vueData.tableData.pushArray(result.data.data, true);
                        if(vueData.multiple){
                            for(var i=0;i<vueData.tableData.length;i++){
                                for(var j=0;j<vueData.config.dataList.length;j++){
                                    if(vueData.tableData[i][prop] == vueData.config.dataList[j][prop]){
                                        self.vues[0].$refs.table.toggleRowSelection(vueData.tableData[i],true);
                                        break;
                                    }
                                }
                            }
                        }
                        vueData.count = result.data.count;
                    }
                }
            });
        },
        _call:function (obj) {
            //单选还是多选
            if(obj.multiple){
                vueData.multiple = true;
            }else{
                vueData.multiple = false;
            }
            //默认配置初始化
            vueData.prop = 'keyword';
            vueData.keyword = '';
            vueData._SORT.field = null;
            vueData._SORT.sort = null;
            vueData.page = 1;
            vueData.limit =10;
            //参数
            //如果没有传每页条数，则默认给[10,20,50,100]
            if(app.isEmpty(obj.config.limitList)){
                obj.config.limitList = [10,20,50,100];
            }else {
                vueData.limit =obj.config.limitList[0];
            }
            vueData.config = obj.config;
            if(obj.config.url){
            }else {
                vueData.config.url='qry/getDataList';
            }
            //清除历史开窗排序状态
            $("th.is-leaf").removeClass("descending");
            $("th.is-leaf").removeClass("ascending");

            //回调
            cb = obj.cb;
            //查询
            self.queryDatas();
        },
        _ready: function () {
            this._super({
                vue: [{
                    el: '#common_open_window',
                    data: vueData,
                    methods: {
                        selectAll: function(selection){
                            var prop = vueData.config.key;
                            if(selection.length > 0){
                                for(var i=0;i<vueData.tableData.length;i++){
                                    var isExist = false;
                                    for(var j=0;j<vueData.config.dataList.length;j++){
                                        if(vueData.tableData[i][prop] == vueData.config.dataList[j][prop]){
                                            isExist = true;
                                            break;
                                        }
                                    }
                                    if(!isExist){
                                        vueData.config.dataList.push(vueData.tableData[i]);
                                    }
                                }
                            }else{
                                for(var i=0;i<vueData.tableData.length;i++){
                                    for(var j=0;j<vueData.config.dataList.length;j++){
                                        if(vueData.tableData[i][prop] == vueData.config.dataList[j][prop]){
                                            vueData.config.dataList.removei(j);
                                            break;
                                        }
                                    }
                                }
                            }
                        },
                        selectRow: function (selection, row) {
                            var prop = vueData.config.key;
                            if(selection.filterKV(row).length > 0){
                                vueData.config.dataList.push(row);
                            }else{
                                for(var i =0;i<vueData.config.dataList.length;i++){
                                    if(row[prop] == vueData.config.dataList[i][prop]){
                                        vueData.config.dataList.removei(i);
                                        break;
                                    }
                                }
                            }
                        },
                        doubleClickRow: function(row, column, event){
                            if(!vueData.multiple){
                                cb(row);
                                self._closeTpl();
                            }
                        },
                        singleClickRow: function (index, row) {
                            if(!vueData.multiple){
                                cb(row);
                                self._closeTpl();
                            }
                        },
                        cancel: function(){
                            self._closeTpl();
                        },
                        sure: function(){
                            cb(vueData.config.dataList);
                            self._closeTpl();
                        },
                        handleSortChange: function(sort){
                            // vueData._SORT.field = sort.prop;
                            vueData._SORT.field = sort.column.property;
                            if(sort.order == null){
                                vueData._SORT.sort = null;
                            }else{
                                vueData._SORT.sort = sort.order.replace('ending','').toLocaleUpperCase();
                            }
                            self.queryDatas();
                        },
                        handleCurrentChange:function(val) {
                            self.queryDatas();
                        },
                        queryDatas:function () {
                            self.queryDatas();
                        },
                        handleLimitChange: function(){
                            self.queryDatas();
                        },
                        getLimitLabel: function(val){
                            return val + '条/页';
                        }
                    },
                    created: function () {
                        self._setEleIsReady('common_open_window');
                    }
                }]
            });
        },
        _lazy: function () {
            this._super();
        }
    });

});